/*******************************************************************************
* 
*    Copyright(C) 2020 WINTOP All rights reserved.
* 
* File        : hal_clock.h
* Author      : BX
* Version     : V1.00
* Date        : 2020-1-1
* Description : 系统时钟
* Chip        : HC32
* History     : V1.00, 2020-1-1, bx, first version

* Disclaimer  :
*   本程序所有权归作者所有。
*   本程序仅用于演示或实现特定产品的功能，任何修改或其它目的的应用均不作保证，
*   未经作者同意不得将本程序的全部或部分用于商业目的。
*******************************************************************************/
#ifndef __HAL_CLOCK_H__
#define __HAL_CLOCK_H__


////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// 基本操作
////////////////////////////////////////////////////////////////////////////////
// 时钟启动停止
void hal_clock_eanble_rch(en_sysctrl_rch_freq_t rch_freq);
void hal_clock_disable_rch(void);
void hal_clock_eanble_rcl(en_sysctrl_rcl_freq_t rcl_freq);
void hal_clock_disable_rcl(void);
void hal_clock_eanble_xth(void);
void hal_clock_disable_xth(void);
void hal_clock_eanble_xtl(void);
void hal_clock_disable_xtl(void);

// 系统时钟切换
void hal_clock_switch_src(en_sysctrl_clk_source_t src);

// 时钟分频
void hal_clock_set_hclk_div(void);
void hal_clock_set_pclk_div(void);

// 获取时钟频率
void hal_clock_get_sys_freq(void);
void hal_clock_get_hclk_freq(void);
void hal_clock_get_pclk_freq(void);

// 时钟输出
void hal_clock_rch_out(void);
void hal_clock_rcl_out(void);
void hal_clock_xth_out(void);
void hal_clock_pll_out(void);
void hal_clock_xtl_out(void);
void hal_clock_hclk_out(void);
void hal_clock_pclk_out(void);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
typedef struct 
{
    en_sysctrl_clk_source_t src;
    
    en_sysctrl_rch_freq_t rch_freq;
    en_sysctrl_rcl_freq_t rcl_freq;
    
    en_sysctrl_hclk_div_t hclk_div;
    en_sysctrl_pclk_div_t pclk_div;
        
    boolean_t disable_old_clock; 
}HAL_CLOCK_INIT;

boolean_t hal_clock_init(HAL_CLOCK_INIT *clock);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

#endif /* __HAL_CLOCK_H__ */
